# FROM 表示设置要制作的镜像基于哪个镜像，FROM指令必须是整个Dockerfile的第一个指令，如果指定的镜像不存在默认会自动从Docker Hub上下载。
# 指定我们的基础镜像是node，latest表示版本是最新
FROM node:latest
# 执行命令，在容器中创建一个目录
RUN mkdir -p /home/nodeNestjs

# WORKDIR指令用于设置Dockerfile中的RUN、CMD和ENTRYPOINT指令执行命令的工作目录(默认为/目录)，该指令在Dockerfile文件中可以出现多次，如果使用相对路径则为相对于WORKDIR上一次的值，
# 例如WORKDIR /data，WORKDIR logs，RUN pwd最终输出的当前目录是/data/logs。
# cd到 /home/nodeNestjs 定位到容器的工作目录
WORKDIR /home/nodeNestjs

# 将根目录下的文件都copy到container（运行此镜像的容器）文件系统的文件夹下
# 把当前目录下的所有文件拷贝到 Image 的 /home/nodeNestjs 目录下
COPY . /home/nodeNestjs

# 安装项目依赖包
#RUN npm install -g npm@8.16.0
RUN npm install -g @nestjs/cli
RUN npm install
RUN npm run build

# 依赖安装后，不需要下载chrome-linux，puppeteer自动安装
# 去镜像网址下载chrom然后复制到puppeteer路径下
# 找到相关版本的chrome下面这个包是从这个地址找的：https://registry.npmmirror.com/binary.html?path=chromium-browser-snapshots/
#RUN wget https://cdn.npmmirror.com/binaries/chromium-browser-snapshots/Linux_x64/1022525/chrome-linux.zip
#RUN apt-get update && apt-get install -y zip
#RUN unzip -d chrome-linux.zip
#RUN cp -rf chrome-linux/* /*/node_modules/puppeteer/.local-chromium/linux-1022525/chrome-linux/

# 设置 puppeteer 的字体
# COPY source-sans-pro.zip /tmp
# 设置源
RUN sed -i 's/deb.debian.org/mirrors.163.com/g' /etc/apt/sources.list && \
  apt update && \
  apt-get install -y dpkg wget unzip
#fonts-droid fonts-arphic-ukai fonts-arphic-uming
RUN wget http://ftp.cn.debian.org/debian/pool/main/f/fonts-noto-cjk/fonts-noto-cjk_20170601+repack1-3+deb10u1_all.deb && \
  dpkg -i fonts-noto-cjk_20170601+repack1-3+deb10u1_all.deb && \
  unzip source-sans-pro-3.006R.zip && cd source-sans-pro-3.006R  && mv ./OTF /usr/share/fonts/  && \
  fc-cache -f -v
# 2. https://github.com/puppeteer/puppeteer/blob/master/.ci/node10/Dockerfile.linux
# Unable to locate package libappindicator1 此处删除了libappindicator1包
RUN apt-get update && \
  apt-get -y install xvfb gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 \
  libdbus-1-3 libexpat1 libfontconfig1 libgbm1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 \
  libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 \
  libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 \
  libxtst6 ca-certificates fonts-liberation libdrm2 libgbm-dev libnss3 lsb-release xdg-utils wget && \
  rm -rf /var/lib/apt/lists/*

# 配置环境变量
ENV HOST 0.0.0.0
ENV PORT 7006

# 容器对外暴露的端口号(笔者的nestjs运行的端口号是7380), EXPOSE：将容器内的某个端口导出供外部访问
EXPOSE 7006

# 容器启动时执行的命令，类似npm run start
CMD ["node", "/home/nodeNestjs/dist/main.js"]